#coding=utf8

'''
读取ip摄像头的流，保存为视频

'''
import cv2

# 通过cv2中的类获取视频流操作对象cap，指定账号密码，ip和端口
cap = cv2.VideoCapture('rtsp://admin:admin123@192.168.0.245:554')
# 调用cv2方法获取cap的视频帧（帧：每秒多少张图片）
fps = cap.get(cv2.CAP_PROP_FPS)
print(fps) # 25.0
# 获取cap视频流的每帧大小
size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)),
        int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
print(size) # (1920, 1080)

# 定义编码格式mpge-4
fourcc = cv2.VideoWriter_fourcc('M', 'P', '4', '2')
# 定义视频文件输入对象
path  = "D:\\data\\test.mp4"
outVideo = cv2.VideoWriter(path, fourcc, fps, size)

# 循环使用cv2的read()方法读取视频帧
while True:
    if cv2.waitKey(1) & 0xFF == 27:
        break
    if cap.isOpened():
        rval, frame = cap.read()
        cv2.imshow('test', frame)
        index = cap.get(cv2.CAP_PROP_POS_MSEC)  # 视频文件的当前位置（以毫秒为单位）或视频捕获时间戳。  CAP_PROP_POS_MSEC
        i = cap.get(cv2.CAP_PROP_POS_FRAMES) # 基于0的索引将被解码/捕获下一帧。
        print("%s   %s" % (index,i))
        # 使用VideoWriter类中的write(frame)方法，将图像帧写入视频文件
        outVideo.write(frame)
cap.release()
outVideo.release()
cv2.destroyAllWindows()